package cn.csc.module.pay.service.rate;

import java.util.*;
import javax.validation.*;
import cn.csc.module.pay.controller.admin.rate.vo.*;
import cn.csc.module.pay.dal.dataobject.rate.PayJzbRateDO;
import cn.csc.framework.common.pojo.PageResult;

/**
 * 见证宝提现手续费率 Service 接口
 *
 * @author liuchuang
 */
public interface PayJzbRateService {

    /**
     * 创建见证宝提现手续费率
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createJzbRate(@Valid PayJzbRateCreateReqVO createReqVO);

    /**
     * 更新见证宝提现手续费率
     *
     * @param updateReqVO 更新信息
     */
    void updateJzbRate(@Valid PayJzbRateUpdateReqVO updateReqVO);

    /**
     * 删除见证宝提现手续费率
     *
     * @param id 编号
     */
    void deleteJzbRate(Long id);

    /**
     * 获得见证宝提现手续费率
     *
     * @param id 编号
     * @return 见证宝提现手续费率
     */
    PayJzbRateDO getJzbRate(Long id);

    /**
     * 获得见证宝提现手续费率列表
     *
     * @param ids 编号
     * @return 见证宝提现手续费率列表
     */
    List<PayJzbRateDO> getJzbRateList(Collection<Long> ids);

    /**
     * 获得见证宝提现手续费率分页
     *
     * @param pageReqVO 分页查询
     * @return 见证宝提现手续费率分页
     */
    PageResult<PayJzbRateDO> getJzbRatePage(PayJzbRatePageReqVO pageReqVO);

    /**
     * 获得见证宝提现手续费率列表, 用于 Excel 导出
     *
     * @param exportReqVO 查询条件
     * @return 见证宝提现手续费率列表
     */
    List<PayJzbRateDO> getJzbRateList(PayJzbRateExportReqVO exportReqVO);

    /**
     * 查询外部用户的提现费率
     * @param merchantId 商户Id
     * @param dicData 外部用户ID
     * @return
     */
    PayJzbRateDO selectByDicData(Integer dicType, Long merchantId, String dicData);

    /**
     * 查询商户默认的提现费率
     * @param merchantId 商户Id
     * @return
     */
    PayJzbRateDO selectDefault(Long merchantId);

}
